package com.nuoniu.sibanyun.service.crm;

import com.baomidou.mybatisplus.extension.service.IService;
import com.nuoniu.sibanyun.entity.crm.CrmDefineField;
import com.nuoniu.sibanyun.entity.dto.CrmDefineFieldDto;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 客户管理自定义字段 服务类
 * </p>
 *
 * @author baiqiang
 * @since 2020-06-15
 */
public interface ICrmDefineFieldService extends IService<CrmDefineField> {

    /**
     * 获取字段列表
     * @author 小啊刚
     * @date 2020/6/16
     */
    List<CrmDefineField> getDefineFieldList(String source);


    /**
     * 修改字段默认值
     * @author 小啊刚
     * @date 2020/6/16
     */
    void saveFieldVal(CrmDefineFieldDto crmDefineFieldDto);

    /**
     * 保存 自定义字段
     * @param crmDefineFieldDto
     */
    void saveField(CrmDefineFieldDto crmDefineFieldDto);

    /**
     * 查询最大的排序
     * @param source
     * @return
     */
    Integer getLastSort(String source);

    /**
     * 批量保存
     * @param crmDefineFieldDtos
     */
    void batchSaveField(List<CrmDefineFieldDto> crmDefineFieldDtos);

    /**
     * 删除
     * @param id
     */
    void deleteOne(Integer id);

    /**
     * 获取系统 必填基础字段
     * @return
     */
    Map mapSysOnfill(String source);

    /**
     * 获取客户字段
     * @author 小啊刚
     * @date 2020/7/1
     */
    List<CrmDefineField> getCrmDefineFieldList(String crm);

    /**
     * 系统管理员 更改基础字段的锁定状态
     * @param crmDefineFieldDto
     * @return
     */
    boolean changeOnLocked(CrmDefineFieldDto crmDefineFieldDto);

    /**
     * 系统管理员 更改租户的基础字段的锁定状态
     * @param crmDefineField
     * @return
     */
    boolean updateOnLockedFromSystem(CrmDefineField crmDefineField);

    /**
     * 更新 用户个性化 自定义列
     * @param crmDefineField
     */
    void updateUserFiled(CrmDefineField crmDefineField);

    /**
     * 查询 是否已经继承 该字段
     * @param parentId
     * @param source
     * @return
     */
    int countParentIdFiled(Integer parentId,String source);

    /**
     * 获取 字段数据
     * @param code
     * @return
     */
    CrmDefineField crmDefineFieldByCode(String source,String code);




    /*******************************    APP    *************************************/
    /**
     * 获取字段列表
     */
    List<CrmDefineField> getDefineFieldListApp(String source);

}
